package org.ccay.core.exception;

import org.ccay.core.exception.impl.ExceptionMessageManager;

/**
 * 应用系统异常的基类，此为抽象类
 * 
 * @since 2011-8-25
 */
public abstract class ApplicationException extends Exception implements IFriendlyMessage,ICodeProvided {

	private static final long serialVersionUID = -1352323993289725490L;

	protected String errorCode;
	
	protected Object[] args;
	
	
	
	/**
	 * 获取异常码
	 * @return errorCode
	 */
	public String getErrorCode() {
		return errorCode;
	}

	/**
	 * 默认构造
	 */
	public ApplicationException(){
		super();
	}
	
	/**
	 * 根据异常码构造
	 * @param errorCode 异常码
	 */
	public ApplicationException(String errorCode){		
		super();	
		this.errorCode = errorCode;
	}
	
	/**
	 * 根据异常码构造
	 * @param errorCode 异常码
	 * @param args 可选参数，使用MessageFormat格式化到Message中
	 */
	public ApplicationException(String errorCode,Object... args){		
		super();	
		this.errorCode = errorCode;
		this.args = args;		
	}
	
	
	/**
	 * 根据异常码和原始异常构造
	 * @param errorCode 异常码
	 * @param innerException 原始异常
	 */
	public ApplicationException(String errorCode,Throwable innerException){	
		super(innerException);
		this.errorCode = errorCode;
	}
	
	/**
	 * 根据异常码和原始异常构造
	 * @param errorCode 异常码
	 * @param innerException 原始异常
	 * @param args 可选参数，使用MessageFormat格式化到Message中
	 */
	public ApplicationException(String errorCode,Throwable innerException,Object... args){	
		super(innerException);
		this.errorCode = errorCode;
		this.args = args;
	}

	/**
	 * 获取本地化的异常信息
	 */
	@Override
	public String getMessage(){
		return  ExceptionMessageManager.getMessage(errorCode,args);
	}


}
